package org.wdcode.common.config;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Iterator;
import java.util.List;

/**
 * 配置管理，读取各种配置文件<br/>
 * 使用ConfigManageFactory工厂方法buildXXX(X)获得实例。使用getXXX(X)方法获得值。<br/>
 * @see org.wdcode.common.config.ConfigManageFactory
 * @author WD
 * @since JDK6
 * @version 1.0 2009-03-25
 */
public interface ConfigManage {
	/**
	 * 写配置文件
	 */
	void write();

	/**
	 * 获得配置文件名
	 * @return 配置文件名
	 */
	String getFileName();

	/**
	 * 检查这个配置管理是否是空
	 * @return true 为空 false不为空
	 */
	boolean isEmpty();

	/**
	 * 检查是否有这个key的属性
	 * @param key 属性key
	 * @return true 有 false 无
	 */
	boolean containsKey(String key);

	/**
	 * 添加一个属性到配置中 如果这个key存在 将会追加到这个key属性中 用列表获得全部值
	 * @param key 属性key
	 * @param value 属性value
	 */
	void addProperty(String key, Object value);

	/**
	 * 设置属性 如果这个key存在 会替换掉这个属性
	 * @param key 属性key
	 * @param value 属性value
	 */
	void setProperty(String key, Object value);

	/**
	 * 清除指定key的属性
	 * @param key 属性key
	 */
	void clearProperty(String key);

	/**
	 * 清除所有属性
	 */
	void clear();

	/**
	 * 根据key获得一个属性值 返回一个对象
	 * @param key 属性key
	 * @return 对象值
	 */
	Object getProperty(String key);

	/**
	 * 获得所有属性key的Iterator
	 * @return Iterator
	 */
	Iterator<String> getKeys();

	/**
	 * 获得属性value
	 * @param key 属性key
	 * @return value
	 */
	boolean getBoolean(String key);

	/**
	 * 获得属性value
	 * @param key 属性key
	 * @param defaultValue 默认值
	 * @return value
	 */
	boolean getBoolean(String key, boolean defaultValue);

	/**
	 * 获得属性value
	 * @param key 属性key
	 * @param defaultValue 默认值
	 * @return value
	 */
	Boolean getBoolean(String key, Boolean defaultValue);

	/**
	 * 获得属性value
	 * @param key 属性key
	 * @return value
	 */
	byte getByte(String key);

	/**
	 * 获得属性value
	 * @param key 属性key
	 * @param defaultValue 默认值
	 * @return value
	 */
	byte getByte(String key, byte defaultValue);

	/**
	 * 获得属性value
	 * @param key 属性key
	 * @param defaultValue 默认值
	 * @return value
	 */
	Byte getByte(String key, Byte defaultValue);

	/**
	 * 获得属性value
	 * @param key 属性key
	 * @return value
	 */
	double getDouble(String key);

	/**
	 * 获得属性value
	 * @param key 属性key
	 * @param defaultValue 默认值
	 * @return value
	 */
	double getDouble(String key, double defaultValue);

	/**
	 * 获得属性value
	 * @param key 属性key
	 * @param defaultValue 默认值
	 * @return value
	 */
	Double getDouble(String key, Double defaultValue);

	/**
	 * 获得属性value
	 * @param key 属性key
	 * @return value
	 */
	float getFloat(String key);

	/**
	 * 获得属性value
	 * @param key 属性key
	 * @param defaultValue 默认值
	 * @return value
	 */
	float getFloat(String key, float defaultValue);

	/**
	 * 获得属性value
	 * @param key 属性key
	 * @param defaultValue 默认值
	 * @return value
	 */
	Float getFloat(String key, Float defaultValue);

	/**
	 * 获得属性value
	 * @param key 属性key
	 * @return value
	 */
	int getInt(String key);

	/**
	 * 获得属性value
	 * @param key 属性key
	 * @param defaultValue 默认值
	 * @return value
	 */
	int getInt(String key, int defaultValue);

	/**
	 * 获得属性value
	 * @param key 属性key
	 * @param defaultValue 默认值
	 * @return value
	 */
	Integer getInteger(String key, Integer defaultValue);

	/**
	 * 获得属性value
	 * @param key 属性key
	 * @return value
	 */
	long getLong(String key);

	/**
	 * 获得属性value
	 * @param key 属性key
	 * @param defaultValue 默认值
	 * @return value
	 */
	long getLong(String key, long defaultValue);

	/**
	 * 获得属性value
	 * @param key 属性key
	 * @param defaultValue 默认值
	 * @return value
	 */
	Long getLong(String key, Long defaultValue);

	/**
	 * 获得属性value
	 * @param key 属性key
	 * @return value
	 */
	short getShort(String key);

	/**
	 * 获得属性value
	 * @param key 属性key
	 * @param defaultValue 默认值
	 * @return value
	 */
	short getShort(String key, short defaultValue);

	/**
	 * 获得属性value
	 * @param key 属性key
	 * @param defaultValue 默认值
	 * @return value
	 */
	Short getShort(String key, Short defaultValue);

	/**
	 * 获得属性value
	 * @param key 属性key
	 * @return value
	 */
	BigDecimal getBigDecimal(String key);

	/**
	 * 获得属性value
	 * @param key 属性key
	 * @param defaultValue 默认值
	 * @return value
	 */
	BigDecimal getBigDecimal(String key, BigDecimal defaultValue);

	/**
	 * 获得属性value
	 * @param key 属性key
	 * @param defaultValue 默认值
	 * @return value
	 */
	BigInteger getBigInteger(String key);

	/**
	 * 获得属性value
	 * @param key 属性key
	 * @param defaultValue 默认值
	 * @return value
	 */
	BigInteger getBigInteger(String key, BigInteger defaultValue);

	/**
	 * 获得属性value
	 * @param key 属性key
	 * @return value
	 */
	String getString(String key);

	/**
	 * 获得属性value
	 * @param key 属性key
	 * @param defaultValue 默认值
	 * @return value
	 */
	String getString(String key, String defaultValue);

	/**
	 * 获得属性value数组
	 * @param key 属性key
	 * @return value数组
	 */
	String[] getStringArray(String key);

	/**
	 * 获得属性value列表
	 * @param key 属性key
	 * @return value列表
	 */
	<E> List<E> getList(String key);

	/**
	 * 获得属性value列表
	 * @param key 属性key
	 * @param defaultValue 默认值
	 * @return value列表
	 */
	<E> List<E> getList(String key, List<Object> defaultValue);
}
